#pragma once

#include <cuda_runtime.h>
// #include "Matrix.hpp"
// Matrices are stored in row-major order:
// M(row, col) = *(M.elements + row * M.width + col)

struct _PlainMatrix {
  int width;
  int height;
  float *elements; // Use raw pointer for simplicity in this example
};

// Thread block size
#define BLOCK_SIZE 16

// matrix multiplication kernel
void CUDAMatMul(const _PlainMatrix A, const _PlainMatrix B, _PlainMatrix C);
__global__ void MatMulKernel(const _PlainMatrix, const _PlainMatrix,
                             _PlainMatrix);
